package com.itheima.d5_bigdecimal;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Test2 {
    public static void main(String[] args) {
        // 目标：掌握BigDecimal进行精确运算的方案。



        // 1、把浮点型数据封装成BigDecimal对象，再来参与运算。
        // a、public BigDecimal(double val) 得到的BigDecimal对象是无法精确计算浮点型数据的。 注意：不推荐使用这个，
        double a = 0.1;
        BigDecimal b1=new BigDecimal(a);
        // b、public BigDecimal(String val)  得到的BigDecimal对象是可以精确计算浮点型数据的。 可以使用。

        String b="0.2";
        BigDecimal b2=new BigDecimal(b);
        // c、public static BigDecimal valueOf(double val): 通过这个静态方法得到的BigDecimal对象是可以精确运算的。是最好的方案。
        double c = 0.3;
        BigDecimal b3=BigDecimal.valueOf(c);
        // 2、public BigDecimal add(BigDecimal augend): 加法 ->返回的BigDecimal类型可以直接打印
        System.out.println(b2.add(b3));
        // 3、public BigDecimal subtract(BigDecimal augend): 减法 ->返回的BigDecimal类型可以直接打印
        System.out.println(b3.subtract(b2));
        // 4、public BigDecimal multiply(BigDecimal augend): 乘法 ->返回的BigDecimal类型可以直接打印
        BigDecimal b4= b2.multiply(b3);
        System.out.println(b4);
        // 5、public BigDecimal divide(BigDecimal b): 除法 ->返回的BigDecimal类型可以直接打印
        System.out.println(b3.divide(b2));
        // 6、public BigDecimal divide(另一个BigDecimal对象，精确几位，舍入模式) : 除法，可以设置精确几位。
        // 舍入模式可以使用枚举 : RoundingMode
        BigDecimal b5=new BigDecimal("1");
        System.out.println(b5.divide(b3, 3, RoundingMode.HALF_DOWN));
        // 7、public double doubleValue() : 把BigDecimal对象又转换成double类型的数据。
        double b6=b2.doubleValue();
        System.out.println(b6);
    }
}
